package algorithm.sort;

import java.util.Arrays;

/**
 * 
 * 插入排序
 * 
 * @author jyzjyz12@163.com
 * @since 2017年2月28日 上午10:12:54
 */
public class InsertSortTest1 {

    public static void main(String[] args) {
        int[] arr1 = { 4, 7, 5, 6, 1, 3, 8 };
        int[] arr2 = { 7, 6, 5, 4, 3, 2, 1 };
        int[] arr3 = { 5, 9, 3, 7, 8, 6, 1, 2, 4 };
        int[] arr4 = { 13, 2, 5, 4, 88, 76, 68, 87, 55, 88, 88, 77, 67, 99, 100, 5, 53, 52, 51, 66 };
        sort(arr1);
        sort(arr2);
        sort(arr3);
        sort(arr4);
        System.out.println(Arrays.toString(arr1));
        System.out.println(Arrays.toString(arr2));
        System.out.println(Arrays.toString(arr3));
        System.out.println(Arrays.toString(arr4));
    }

    public static void sort(int[] arr) {
        for (int i = 1; i < arr.length; i++) { // 从第2个元素开始遍历整个数组
            int j = i, value = arr[i]; // 记录一下当前的元素的位置和值
            while (j > 0 && arr[j - 1] > value) { // 当前元素不断和之前的元素比较大小,直到到达数组头部或者之前元素的值小于当前元素
                arr[j] = arr[j - 1];// 如果之前的元素比当前元素大就把之前的元素向后移动一格位置(其实是复制到后面一格位置,但是不用清除之前的位置,因为再之前的元素也可能会覆盖这个位置),直到到数组头部或者找到了一个比当前元素小的位置
                j--;
            }
            arr[j] = value;// 找到的这个位置的元素已经向后移动了一个格子,找到的这个位置就是当前元素应该要插入到的位置
        }
    }
}
